#ifndef MYPRINTER_H
#define MYPRINTER_H

#include <QObject>
#include <QSerialPort>
#include <QByteArray>
#include <QtGlobal>

class MyPrinter: public QObject
{
public:
    explicit MyPrinter(QObject* parent = nullptr);
    virtual ~MyPrinter();
    // 是否初始化成功
    bool printer_ok = false;
    // 初始化
    bool Printer_init(QString comName);
    // 打印小票
    bool Printer_print_receipt(float weight,float unitprice,float totalprice);

private:
    // 串口
    QSerialPort* Printer_SerialPort;
    // 发送指令到
    void sendCommand(QByteArray cmd,int cmdLen);
    // 打开串口
    bool Printer_open(QString comName);
    // 关闭串口
    bool Printer_close();
    // 配置
    bool Printer_config();    
    // 配置汉字模式
    void Printer_set_hz();
    // 取消汉字模式
    void Printer_cancel_hz();
    // 配置字符集1,包括 ASCII 字符,及各种图形符号等
    void Printer_set_charset1();
    // 重置打印机
    void Printer_reset();
    // 配置字符集2,包括德文法文俄文日语片假名等
    void Printer_set_charset2();
    // 配置字体大小 fontSize取值：1~8
    void Printer_set_fontsize(unsigned char fontSize);
    // 配置左限 leftlimit取值：0~255
    void Printer_set_leftlimit(unsigned char leftlimit);
    // 配置右限 rightlimit取值：0~255
    void Printer_set_rightlimit(unsigned char rightlimit);
    // 配置左边距 用 nL 和 nH 设定左边空白量为(nL+nH*256)×0.125毫米。其中,0≤nL≤255,0≤nH≤1,0≤nL+nH*256≤384。
    void Printer_set_leftmargin(unsigned char nL,unsigned char nH);
    // 配置右边距 用 nL 和 nH 设定右边空白量为(nL+nH*256)×0.125毫米。其中,0≤nL≤255,0≤nH≤1,0≤nL+nH*256≤384。
    void Printer_set_rightmargin(unsigned char nL,unsigned char nH);
    // 配置字间距 用nP设定字间距。其中,0≤nP≤255。
    void Printer_set_character_spacing(unsigned char nP);
    // 配置行间距 用nP设定行间距为(nP*0.125 毫米),点阵图形打印时nP应为0，文本打印时推荐设置为3
    void Printer_set_line_spacing(unsigned char nP);
    // 配置对齐方式 align取值：0~2 0:左对齐 1:居中对齐 2:右对齐
    void Printer_set_align(unsigned char align);
    // 打印二维码 version为二维码版本(0~9),ecc为二维码纠错等级(0~3),qrcode为二维码内容
    void Printer_print_qrcode(unsigned char version,unsigned char ecc,QByteArray qrcode);
    // 关闭打印
    void Printer_print_off();
    // 打开打印
    void Printer_print_on();
private:
    // 打印走纸 nL为走纸行数
    void Printer_print_feed(unsigned char nL);
};

#endif
